package com.by.service;

import com.by.entity.PageResult;
import com.by.entity.QueryPageBean;
import com.by.mapper.SetmealMapper;
import com.by.mapper.SetmealPicDbMapper;
import com.by.mapper.SetmealPicMapper;
import com.by.pojo.CheckGroup;
import com.by.pojo.Setmeal;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class SetmealServiceImpl implements SetmealService {

    @Autowired
    private SetmealMapper setmealMapper;
    @Autowired
    private SetmealPicMapper setmealPicMapper;
    @Autowired
    private SetmealPicDbMapper setmealPicDbMapper;

    @Override
    public void add(Integer[] checkgroupIds, Setmeal setmeal) {
        //1、保存套餐信息，并返回自增id
        setmealMapper.addSetmeal(setmeal);
        //2、保存关联表信息
        addSetmealCheckGroup(checkgroupIds, setmeal);

    }

    private void addSetmealCheckGroup(Integer[] checkgroupIds, Setmeal setmeal) {
        Integer setmealId = setmeal.getId();
        for (Integer checkgroupId : checkgroupIds) {
            setmealMapper.addSetmealCheckGroup(setmealId,checkgroupId);
        }
    }

    @Override
    public void addSetmealPic(String img) {
        setmealPicMapper.addSetmealPic(img);
    }

    @Override
    public void addSetmealPicDb(String img) {
        setmealPicDbMapper.addSetmealDbPic(img);
    }

    @Override
    public PageResult findPage(QueryPageBean queryPageBean) {
        //设置分页条件
        PageHelper.startPage(queryPageBean.getCurrentPage(), queryPageBean.getPageSize());
        //去空格，避免不必要的条件查询
        if (queryPageBean.getQueryString() != null && queryPageBean.getQueryString() != "") {
            queryPageBean.setQueryString(queryPageBean.getQueryString().trim());
        }
        //正常的查询
        List<Setmeal> setmealList = setmealMapper.findPage(queryPageBean);
        //获取分页信息
        PageInfo<Setmeal> pageInfo = new PageInfo<Setmeal>(setmealList);
        return new PageResult(pageInfo.getTotal(), pageInfo.getList());
    }

    @Override
    public Setmeal findById(Integer id) {
        return setmealMapper.findById(id);
    }

    @Override
    public List<Integer> findCheckGroupIdsBySetmealId(Integer id) {
        return setmealMapper.findCheckGroupIdsBySetmealId(id);
    }

    @Override
    public void edit(Integer[] checkgroupIds, Setmeal setmeal) {
        //1、保存套餐信息
        setmealMapper.edit(setmeal);


        //2、根据setmealId删除关联表
        setmealMapper.deleteCheckGroupBySetmealId(setmeal.getId());

        //2、保存关联表信息
        addSetmealCheckGroup(checkgroupIds, setmeal);
    }

    @Override
    public void deleteSetmealById(Integer id, String setmealPicDbImg) {
        //删除套餐信息：t_setmeal,t_setmeal_checkgroup,setmeal_pic_db，setmeal_pic
        //图片的信息是在三个表中存储：setmeal_pic_db，setmeal_pic，t_setmeal
        //t_setmeal 图片信息删除套餐信息时删除

        //2、根据setmealId删除关联表
        setmealMapper.deleteCheckGroupBySetmealId(id);


        setmealMapper.deleteSetmealById(id);

        //还记得定时任务吗？
        /*
            数据库查询可省略讲解：
        *         select pic from setmeal_pic where pic not in(select pic from setmeal_pic_db)
        * setmeal_pic：用户只要选择图片，上传到七牛云回显成功，便会存储到这张表中，相当于临时表
        * setmeal_pic_db:用户只有点击新增套餐的确定按钮或者编辑套餐的确定按钮，图片才会保存到表中，相当于数据库表。
        *   select pic from setmeal_pic_db:查询setmeal_pic_db表中的图片名称
        *   select pic from setmeal_pic where pic not in 查询setmeal_pic表中不在setmeal_pic_db表中的图片名称
        *   delete from setmeal_pic where pic = #{picName} 根据图片名称删除，因为表中只有一个自增id和图片名称
        *
        * 定时任务工作原理：当临时表中存在数据库表中没有的图片名称时，调用定时任务，删除临时表的图片和七牛云的图片
        *我们这里编辑图片后，要删除数据库表中的图片，来人为引起临时表中的图片多于数据库表中的图片
        *需要通过字符串删除
        * */
        setmealPicDbMapper.deletesetmealPicDbByPicName(setmealPicDbImg);
    }
}
